/*
 * Accelerometer.java
 */

package org.sunspotworld.demo;

import com.sun.spot.sensorboard.EDemoBoard;
import com.sun.spot.sensorboard.peripheral.LIS3L02AQAccelerometer;
import com.sun.spot.util.Utils;
import java.io.IOException;

/**
 *
 * @author kkmitch
 */
public class Accelerometer {

    private LIS3L02AQAccelerometer accel = null;
//    private int Sampling_Interval = 6; //6milisecond = 166Hz
//    private int Cal_Counter = 100;   // calibrate times
//    //private int AccMin = 1024;
//    private int AccXMin = 1024;
//    private int AccYMin = 1024;
//    private int AccZMin = 1024;
//    private int TiltXMin = 1024;
//    private int TiltYMin = 1024;
//    private int TiltZMin = 1024;

    public Accelerometer() {
        try {
            accel = (LIS3L02AQAccelerometer) EDemoBoard.getInstance().getAccelerometer();
            accel.setScale(LIS3L02AQAccelerometer.SCALE_2G);
            accel.setRestOffsets(); // use relative values
        } catch (IOException ex) {
            ex.printStackTrace();
        }
        //calibrate();
    }

    public int getTiltX() {
        try {
            return (int) Math.toDegrees(accel.getTiltX()); // returns [-90, +90]
        } catch (IOException ex) {
            ex.printStackTrace();
            return 1024;
        }
    }

    public int getTiltY() {
        try {
            return (int) Math.toDegrees(accel.getTiltY()); // returns [-90, +90]
        } catch (IOException ex) {
            ex.printStackTrace();
            return 1024;
        }
    }

    public int getTiltZ() {
        try {
            return (int) Math.toDegrees(accel.getTiltZ()); // returns [-90, +90]
        } catch (IOException ex) {
            ex.printStackTrace();
            return 1024;
        }
    }

    public int getAccX() {
        try {
            return accel.getRawX();
        }catch(IOException ex) {
            return 1024;
        }
    }

    public int getAccY() {
        try {
            return accel.getRawY();
        }catch(IOException ex) {
            return 1024;
        }
    }

    public int getAccZ() {
        try {
            return accel.getRawZ();
        }catch(IOException ex) {
            return 1024;
        }
    }

//    public void calibrate(){
//        for (int i = 0; i < Cal_Counter ; i++) {
//            //if (AccMin > getAcc()) AccMin = getAcc();
//            if (AccXMin > inAccX()) AccXMin = inAccX();
//            if (AccYMin > inAccY()) AccYMin = inAccY();
//            if (AccZMin > inAccZ()) AccZMin = inAccZ();
//            if (TiltXMin > inTiltX()) TiltXMin = inTiltX();
//            if (TiltYMin > inTiltY()) TiltYMin = inTiltY();
//            if (TiltZMin > inTiltZ()) TiltZMin = inTiltZ();
//            Utils.sleep(Sampling_Interval);
//        }
//        //System.out.println(AccMin);
//        //System.out.println("AccXMin " + AccXMin);
//        //System.out.println("AccYMin " + AccYMin);
//        //System.out.println("AccZMin " + AccZMin);
//        //System.out.println("TiltXMin " + TiltXMin);
//        //System.out.println("TiltYMin " + TiltYMin);
//        //System.out.println("TiltZMin " + TiltZMin);
//    }
//
//    /*public int getAcc() {
//        try {
//            int temp = (int) accel.getRaw(LIS3L02AQAccelerometer.ALL_AXES);
//            int temp1 = temp - AccXMin;
//            System.out.println(temp);
//            System.out.println(temp1);
//            if(temp1 < 0)
//                return 0;
//            else
//                return temp1;
//        }catch(IOException ex) {
//            return -1;
//        }
//    }*/
//
//    private int inAccX() {
//        try {
//            int temp = (int) accel.getRawX();
//            //System.out.println("inAccX " + temp);
//            return temp;
//        }catch(IOException ex) {
//            return 1024;
//        }
//    }
//    public int getAccX() {
//        int temp1 = inAccX() - AccXMin;
//        //System.out.println("getAccX " + temp1);
//        if(temp1 < 0)
//            return 0;
//        else
//            return temp1;
//    }
//    private int inAccY() {
//        try {
//            int temp = (int) accel.getRawY();
//            //System.out.println("inAccY " + temp);
//            return temp;
//        }catch(IOException ex) {
//            return 1024;
//        }
//    }
//    public int getAccY() {
//        int temp1 = inAccY() - AccYMin;
//        //System.out.println("getAccY " + temp1);
//        if(temp1 < 0)
//            return 0;
//        else
//            return temp1;
//    }
//    private int inAccZ() {
//        try {
//            int temp = (int) accel.getRawZ();
//            //System.out.println("inAccZ " + temp);
//            return temp;
//        }catch(IOException ex) {
//            return 1024;
//        }
//    }
//    public int getAccZ() {
//        int temp1 = inAccZ() - AccZMin;
//        //System.out.println("getAccZ " + temp1);
//        if(temp1 < 0)
//            return 0;
//        else
//            return temp1;
//    }
//    private int inTiltX() {
//        try {
//            int temp = (int) Math.toDegrees(accel.getTiltX());
//            //System.out.println("inTiltX " + temp);
//            return temp;
//        }catch(IOException ex) {
//            return 1024;
//        }
//    }
//    public int getTiltX() {
//        int temp1 = inTiltX() - TiltXMin;
//        //System.out.println("getTiltX " + temp1);
//        if(temp1 < 0)
//            return 0;
//        else
//            return temp1;
//    }
//    public int inTiltY() {
//        try {
//            int temp = (int) Math.toDegrees(accel.getTiltY());
//            //System.out.println("inTiltY " + temp);
//            return temp;
//        }catch(IOException ex) {
//            return 1024;
//        }
//    }
//    public int getTiltY() {
//        int temp1 = inTiltY() - TiltYMin;
//        //System.out.println("getTiltY " + temp1);
//        if(temp1 < 0)
//            return 0;
//        else
//            return temp1;
//    }
//    public int inTiltZ() {
//        try {
//            int temp = (int) Math.toDegrees(accel.getTiltZ());
//            //System.out.println("inTiltZ " + temp);
//            return temp;
//        }catch(IOException ex) {
//            return 1024;
//        }
//    }
//    public int getTiltZ() {
//        int temp1 = inTiltZ() - TiltZMin;
//        //System.out.println("getTiltZ " + temp1);
//        if(temp1 < 0)
//            return 0;
//        else
//            return temp1;
//    }
//
//    public void setScale2G() {
//        accel.setScale(LIS3L02AQAccelerometer.SCALE_2G);
//        calibrate();
//    }
//    public void setScale6G() {
//        accel.setScale(LIS3L02AQAccelerometer.SCALE_6G);
//        calibrate();
//    }
//
//    public void setSamplingInterval(int interval) {
//        Sampling_Interval = interval;
//    }
//    public void setCalCounter(int counter) {
//        Cal_Counter = counter;
//    }
}
